function handleLogin() {
    var e = [], o = window.swaggerUiAuth.authSchemes || window.swaggerUiAuth.securityDefinitions;
    if (o) {
        var i, n = o;
        for (i in n) {
            var a = n[i];
            if ("oauth2" === a.type && a.scopes) {
                var t;
                if (Array.isArray(a.scopes)) {
                    var p;
                    for (p = 0; p < a.scopes.length; p++) e.push(a.scopes[p])
                } else for (t in a.scopes) e.push({scope: t, description: a.scopes[t], OAuthSchemeKey: i})
            }
        }
    }
    for (window.swaggerUi.api && window.swaggerUi.api.info && (appName = window.swaggerUi.api.info.title), $(".api-popup-dialog").remove(), popupDialog = $(['<div class="api-popup-dialog">', '<div class="api-popup-title">Select OAuth2.0 Scopes</div>', '<div class="api-popup-content">', "<p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.", '<a href="#">Learn how to use</a>', "</p>", "<p><strong>" + appName + "</strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>", '<ul class="api-popup-scopes">', "</ul>", '<p class="error-msg"></p>', '<div class="api-popup-actions"><button class="api-popup-authbtn api-button green" type="button">Authorize</button><button class="api-popup-cancel api-button gray" type="button">Cancel</button></div>', "</div>", "</div>"].join("")), $(document.body).append(popupDialog), popup = popupDialog.find("ul.api-popup-scopes").empty(), p = 0; p < e.length; p++) t = e[p], str = '<li><input type="checkbox" id="scope_' + p + '" scope="' + t.scope + '"" oauthtype="' + t.OAuthSchemeKey + '"/><label for="scope_' + p + '">' + t.scope, t.description && ($.map(o, function (e, o) {
        return o
    }).length > 1 ? str += '<br/><span class="api-scope-desc">' + t.description + " (" + t.OAuthSchemeKey + ")</span>" : str += '<br/><span class="api-scope-desc">' + t.description + "</span>"), str += "</label></li>", popup.append(str);
    var r = $(window), s = r.width(), c = r.height(), l = r.scrollTop(), d = popupDialog.outerWidth(),
        u = popupDialog.outerHeight(), h = (c - u) / 2 + l, g = (s - d) / 2;
    popupDialog.css({
        top: (h < 0 ? 0 : h) + "px",
        left: (g < 0 ? 0 : g) + "px"
    }), popupDialog.find("button.api-popup-cancel").click(function () {
        popupMask.hide(), popupDialog.hide(), popupDialog.empty(), popupDialog = []
    }), $("button.api-popup-authbtn").unbind(), popupDialog.find("button.api-popup-authbtn").click(function () {
        function e(e) {
            return e.vendorExtensions["x-tokenName"] || e.tokenName
        }

        popupMask.hide(), popupDialog.hide();
        var o, i = window.swaggerUi.api.authSchemes, n = window.location,
            a = location.pathname.substring(0, location.pathname.lastIndexOf("/")),
            t = n.protocol + "//" + n.host + a + "/o2c.html", p = window.oAuthRedirectUrl || t, r = null, s = [],
            c = popup.find("input:checked"), l = [];
        for (k = 0; k < c.length; k++) {
            var d = $(c[k]).attr("scope");
            s.indexOf(d) === -1 && s.push(d);
            var u = $(c[k]).attr("oauthtype");
            l.indexOf(u) === -1 && l.push(u)
        }
        window.enabledScopes = s;
        for (var h in i) if (i.hasOwnProperty(h) && l.indexOf(h) != -1) {
            var g = i[h].flow;
            if ("oauth2" !== i[h].type || !g || "implicit" !== g && "accessCode" !== g) {
                if ("oauth2" === i[h].type && g && "application" === g) {
                    var w = i[h];
                    return window.swaggerUi.tokenName = e(w) || "access_token", void clientCredentialsFlow(s, w.tokenUrl, h)
                }
                if (i[h].grantTypes) {
                    var c = i[h].grantTypes;
                    for (var f in c) if (c.hasOwnProperty(f) && "implicit" === f) {
                        var w = c[f];
                        w.loginEndpoint.url;
                        r = w.loginEndpoint.url + "?response_type=token", window.swaggerUi.tokenName = e(w)
                    } else if (c.hasOwnProperty(f) && "accessCode" === f) {
                        var w = c[f];
                        w.tokenRequestEndpoint.url;
                        r = w.tokenRequestEndpoint.url + "?response_type=code", window.swaggerUi.tokenName = e(w)
                    }
                }
            } else {
                var w = i[h];
                r = w.authorizationUrl + "?response_type=" + ("implicit" === g ? "token" : "code"), window.swaggerUi.tokenName = e(w) || "access_token", window.swaggerUi.tokenUrl = "accessCode" === g ? w.tokenUrl : null, o = h
            }
        }
        redirect_uri = p, r += "&redirect_uri=" + encodeURIComponent(p), r += "&realm=" + encodeURIComponent(realm), r += "&client_id=" + encodeURIComponent(clientId), r += "&scope=" + encodeURIComponent(s.join(scopeSeparator)), r += "&state=" + encodeURIComponent(o);
        for (var h in additionalQueryStringParams) r += "&" + h + "=" + encodeURIComponent(additionalQueryStringParams[h]);
        window.open(r)
    }), popupMask.show(), popupDialog.show()
}

function handleLogout() {
    for (key in window.swaggerUi.api.clientAuthorizations.authz) window.swaggerUi.api.clientAuthorizations.remove(key);
    window.enabledScopes = null, $(".api-ic.ic-on").addClass("ic-off"), $(".api-ic.ic-on").removeClass("ic-on"), $(".api-ic.ic-warning").addClass("ic-error"), $(".api-ic.ic-warning").removeClass("ic-warning")
}

function initOAuth(e) {
    var o = e || {}, i = [];
    return appName = o.appName || i.push("missing appName"), popupMask = o.popupMask || $("#api-common-mask"), popupDialog = o.popupDialog || $(".api-popup-dialog"), clientId = o.clientId || i.push("missing client id"), clientSecret = o.clientSecret || null, realm = o.realm || i.push("missing realm"), scopeSeparator = o.scopeSeparator || " ", additionalQueryStringParams = o.additionalQueryStringParams || {}, i.length > 0 ? void log("auth unable initialize oauth: " + i) : ($("pre code").each(function (e, o) {
        hljs.highlightBlock(o)
    }), $(".api-ic").unbind(), void $(".api-ic").click(function (e) {
        $(e.target).hasClass("ic-off") ? handleLogin() : handleLogout()
    }))
}

function clientCredentialsFlow(e, o, i) {
    var n = {client_id: clientId, client_secret: clientSecret, scope: e.join(" "), grant_type: "client_credentials"};
    $.ajax({
        url: o, type: "POST", data: n, success: function (e, o, n) {
            onOAuthComplete(e, i)
        }, error: function (e, o, i) {
            onOAuthComplete("")
        }
    })
}

var appName, popupMask, popupDialog, clientId, realm, redirect_uri, clientSecret, scopeSeparator,
    additionalQueryStringParams;
window.processOAuthCode = function (e) {
    var o = e.state, i = window.location, n = location.pathname.substring(0, location.pathname.lastIndexOf("/")),
        a = i.protocol + "//" + i.host + n + "/o2c.html", t = window.oAuthRedirectUrl || a,
        p = {client_id: clientId, code: e.code, grant_type: "authorization_code", redirect_uri: t};
    clientSecret && (p.client_secret = clientSecret), $.ajax({
        url: window.swaggerUiAuth.tokenUrl,
        type: "POST",
        data: p,
        success: function (e, i, n) {
            onOAuthComplete(e, o)
        },
        error: function (e, o, i) {
            onOAuthComplete("")
        }
    })
}, window.onOAuthComplete = function (e, o) {
    if (e) if (e.error) {
        var i = $("input[type=checkbox],.secured");
        i.each(function (e) {
            i[e].checked = !1
        }), alert(e.error)
    } else {
        var n = e[window.swaggerUiAuth.tokenName];
        if (o || (o = e.state), n) {
            var a = null;
            $.each($(".auth .api-ic .api_information_panel"), function (e, o) {
                var i = o;
                if (i && i.childNodes) {
                    var n = [];
                    $.each(i.childNodes, function (e, o) {
                        var i = o.innerHTML;
                        i && n.push(i)
                    });
                    for (var t = [], p = 0; p < n.length; p++) {
                        var r = n[p];
                        window.enabledScopes && window.enabledScopes.indexOf(r) == -1 && t.push(r)
                    }
                    t.length > 0 ? (a = o.parentNode.parentNode, $(a.parentNode).find(".api-ic.ic-on").addClass("ic-off"), $(a.parentNode).find(".api-ic.ic-on").removeClass("ic-on"), $(a).find(".api-ic").addClass("ic-warning"), $(a).find(".api-ic").removeClass("ic-error")) : (a = o.parentNode.parentNode, $(a.parentNode).find(".api-ic.ic-off").addClass("ic-on"), $(a.parentNode).find(".api-ic.ic-off").removeClass("ic-off"), $(a).find(".api-ic").addClass("ic-info"), $(a).find(".api-ic").removeClass("ic-warning"), $(a).find(".api-ic").removeClass("ic-error"))
                }
            }), "undefined" != typeof window.swaggerUi && (window.swaggerUi.api.clientAuthorizations.add(window.swaggerUiAuth.OAuthSchemeKey, new SwaggerClient.ApiKeyAuthorization("Authorization", "Bearer " + n, "header")), window.swaggerUi.load())
        }
    }
};